
#include <stdio.h>
#include <GL/gl.h>
#include "glaux.h"
#include "tgaload.cpp"
extern GLuint idTextura[];
/* Adiciona o biblioteca glaux.lib ao projeto */
#pragma comment(lib, "GLAUX.lib")
 
// TODO escrever sobre a função e tirar ela daqui.
AUX_RGBImageRec *LoadBMP(char *Filename)
{
	FILE *File=NULL;
	if ( !Filename ) {
		return NULL;
	}
	File = fopen( Filename,"r" );	
	if ( File )	// Se o arquivo existe
	{
		fclose( File );			        
		return auxDIBImageLoad( Filename );//Retorna a imagem
	}
	return NULL;			
}


/*============================= Função ler_textura =======================*/

/**
	Função para ler uma textura e gerar um indice para cada uma das texturas lidas.

        A função recebe o endereço da imagem (no formato bmp) e faz a leitura dela, através
        da função <i>LoadBMP</i> da biblioteca GLAUX.

	@param imagem: imagem a ser lida.
        @param indice: o indice para representar a imagem..
*/

void ler_textura_BMP( char *imagem, GLuint indice )
{
    AUX_RGBImageRec *imagemTextura = NULL;

    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );

    imagemTextura = LoadBMP( imagem );
    /* Define quantas texturas serão usadas  */
    glGenTextures( 1, &idTextura[indice] );
    
    /* Define que tipo de textura será usada */
    glBindTexture( GL_TEXTURE_2D, idTextura[indice] );
    
    /* Define o número da textura */
    //idTextura[0] = 0;
    
    glTexImage2D( GL_TEXTURE_2D, 0, 3, imagemTextura->sizeX, 
                    imagemTextura->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE,
                    imagemTextura->data ); /* TODO Descobrir o que isso faz!! */

    /*gluBuild2DMipmaps( GL_TEXTURE_2D,     // A textura é 2D 
                        3,                       // 3 Significa que é uma textura "RGB" 
                        imagemTextura->sizeX,    // Largura do Bitmap
                        imagemTextura->sizeY,    // Altura do Bitmap
                        GL_RGB,                   // O Bitmap está no formato RGB 
                        GL_UNSIGNED_BYTE,         // Tipo de dado de cada Pixel é armazenado
                        imagemTextura->data);    // Dados do Bitmap Atual*/
    
    glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR );	
    glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR );
    glEnable( GL_TEXTURE_2D );
    
}

void ler_textura_TGA ( char *imagem, GLuint indice )
{
	image_t temp_image;
	glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
	// Habilita o uso de textura 
	
	glEnable ( GL_TEXTURE_2D );
	

	// Define a forma de armazenamento dos pixels na textura (1= alihamento por byte)
	glPixelStorei ( GL_UNPACK_ALIGNMENT, 1 );

	// Define quantas texturas serão usadas no programa 
	//glGenTextures (2, texture_id);  // 1 = uma textura;
									// texture_id = vetor que guardas os números das texturas
	glGenTextures( 1, &idTextura[indice] );
	
	glBindTexture( GL_TEXTURE_2D, idTextura[indice] );

	// Define que tipo de textura será usada
	// GL_TEXTURE_2D ==> define que será usada uma textura 2D (bitmaps)
	// texture_id[CUBE_TEXTURE]  ==> define o número da textura 
	//glBindTexture ( GL_TEXTURE_2D, texture_id[CUBE_TEXTURE] );

	// carrega a uma imagem TGA 
	
	tgaLoad  ( imagem, &temp_image, TGA_FREE | TGA_LOW_QUALITY );
	
	glBindTexture( GL_TEXTURE_2D, idTextura[indice] );
	
	// TODO Tirar comentarios..
	//glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR );	
	//glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR );
	//glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
	

}




